﻿using System;
using System.Collections.Generic;
using System.Linq;
using System.Web;
using System.Web.Mvc;
using MuaChung.Models;
using System.Net.Mail;
using System.Net;
using System.Text;
using MuaChung.Base;

namespace MuaChung.Controllers
{
    
    public class ManagerController : Controller
    {
        //
        // GET: /Manager/
        [Authorize(Roles="Admin,Manager")]
        public ActionResult Index()
        {
            return RedirectToAction("ManagerPanel");
        }
        [Authorize(Roles = "Admin,Manager")]       
        public ActionResult ListAllQuestion(int currentPage = 1, int pageSize = 10, int type = 1)
        {
            ViewData["cp"] = currentPage;
            ViewData["ps"] = pageSize;
            ViewData["t"] = type;
            List<TROGIUP> model = new List<TROGIUP>();
            if (type == 1)
            {
                model = HelpModel.GetAll(currentPage, pageSize);
            }
            else if (type == 2)
            {
                model = HelpModel.GetAllNoAnswer(currentPage, pageSize);
            }
            if (model == null)
            {
                ViewData["status"] = "Fail";
                ViewData["Message"] = "Không có câu hỏi nào!";
            }
            else
            {
                ViewData["status"] = "OK";
            }
           
            return View(model);
        }

        [Authorize(Roles = "Admin, Manager")]
        public ActionResult SendAnswer(int qid)
        {
            TROGIUP tmp = HelpModel.FindByID(qid);
            AnswerModel model = new AnswerModel();
            model.email = tmp.Email;
            model.id = tmp.ID;
            model.noiDungCauHoi = tmp.NoiDung;

            return View(model);
        }

        [HttpPost]
        [Authorize(Roles = "Admin, Manager")]
        [ValidateInput(false)]
        public ActionResult SendAnswer(AnswerModel model, FormCollection frm)
        {            
            model.noiDungTraLoi = HttpUtility.HtmlDecode(frm.GetValue("ctl00$MainContent$Answer").AttemptedValue);
            List<string> recvEmail = new List<string>();
            recvEmail.Add(model.email);
            if (model.noiDungTraLoi == "")
            {
                ViewData["Message"] = "Vui lòng nhập nội dung trả lời";
                return View(model);
            }            
            string mailBody = "Chào bạn,<br/><br/>Chúng tôi xin trả lời câu hỏi của bạn đã gửi đến hệ thống của chúng tôi để yêu cầu trợ giúp.<br/>";
            mailBody += "<br/><fieldset><legend>Nội dung câu hỏi của bạn</legend>";
            mailBody += model.noiDungCauHoi + "</fieldset>";
            mailBody += "<br/><fieldset><legend>Nội dung trả lời từ chúng tôi</legend>";
            mailBody += model.noiDungTraLoi + "</fieldset>";
            mailBody += "Nếu câu trả lời của chúng tôi chưa thỏa mãn được thắc mắc của bạn, vui lòng KHÔNG reply lại mail này mà chỉ gửi lại nội dung thắc mắc của bạn";
            mailBody += " bằng chức năng gửi câu hỏi trong <a href=\"" + BaseWeb.WebLink + "Help/SendQuestion\">trang web của chúng tôi</a>";
            
            if(BaseWeb.SendMail("HotMoiNgay", BaseWeb.SupportEmailID, BaseWeb.SupportEmailPass, recvEmail, "Hỗ trợ khách hàng", mailBody))
            {
                TROGIUP tmp = HelpModel.FindByID(model.id);
                tmp.TinhTrang = 1;
                tmp.Ma_NguoiTraLoi = AccountModel.FindByUsername(User.Identity.Name).ID;
                HelpModel.UpdateQuestion(tmp);
                ViewData["Message"] = "Gửi mail thành công!";
            }
            else
            {
                ViewData["Message"] = "Gửi mail thất bại! Vui lòng thử lại lần nữa!";
            }

            return View(model);
        }

        [Authorize(Roles = "Admin,Manager")]
        public ActionResult QuestionDetail(int id)
        {
            TROGIUP model = HelpModel.FindByID(id);

            return View(model);
        }

        [Authorize(Roles = "Admin,Manager")]
        public ActionResult Statistic()
        {
            return RedirectToAction("StatisticByIncome");
        }

        [Authorize(Roles = "Admin,Manager")]
        public ActionResult StatisticByIncome()
        {
            List<DONHANG> temp = new List<DONHANG>();
            temp = DonHangModels.GetAll(1,2000);
            Decimal DoanhThu = 0;
            List<DOANHNGHIEP> dn = DoanhNghiepModel.GetAll();
            List<CompanyIncome> lstDNIC = new List<CompanyIncome>();
            foreach (var item in dn)
            {
                CompanyIncome tmp = new CompanyIncome();
                tmp.dn = item;
                tmp.income = 0;
                lstDNIC.Add(tmp);
            }
            foreach (var item in temp)
            {
                DoanhThu += item.TongGia;
                foreach (var dnic in lstDNIC)
                {
                    if (dnic.dn.ID == item.COUPON.DOANHNGHIEP.ID)
                    {
                        dnic.income += item.TongGia;
                    }
                }
            }
            decimal maxIC = lstDNIC.First().income;
            int index = 0;
            for (int i = 0; i < lstDNIC.Count; i++)
            {
                if (lstDNIC[i].income > maxIC)
                {
                    maxIC = lstDNIC[i].income;
                    index = i;
                }
            }                        
            ViewData["Type"] = 1;
            ViewData["Thang"] = DateTime.Now.Month;
            ViewData["Nam"] = DateTime.Now.Year;
            ViewData["Quy"] = 1;
            return View(lstDNIC);
        }

        [HttpPost]
        [Authorize(Roles = "Admin,Manager")]
        public ActionResult StatisticByIncome(FormCollection frm)
        {
            int type = 1;
            string strType = frm.GetValue("type").AttemptedValue;
            switch (strType)
            {
                case "Thang":
                    type = 1;
                    break;
                case "Nam":
                    type = 3;
                    break;
                case "Quy":
                    type = 2;
                    break;
                default:
                    break;
            }
            int y = Convert.ToInt32(frm.GetValue("nam").AttemptedValue);
            int m = Convert.ToInt32(frm.GetValue("thang").AttemptedValue);
            int q = Convert.ToInt32(frm.GetValue("quy").AttemptedValue);
            if (type == 2)
            {
                m = ((q - 1) * 3) + 1;
            }
            DateTime dt = new DateTime(y, m, 1);
            List<DONHANG> temp = new List<DONHANG>();
            temp = DonHangModels.FindAllByTime(dt, type);
            Decimal DoanhThu = 0;
            List<DOANHNGHIEP> dn = DoanhNghiepModel.GetAll();
            List<CompanyIncome> lstDNIC = new List<CompanyIncome>();
            foreach (var item in dn)
            {
                CompanyIncome tmp = new CompanyIncome();                
                tmp.dn = item;
                tmp.income = 0;
                lstDNIC.Add(tmp);
            }
            foreach (var item in temp)
            {
                DoanhThu += item.TongGia;
                foreach (var dnic in lstDNIC)
                {
                    if (dnic.dn.ID == item.COUPON.DOANHNGHIEP.ID)
                    {
                        dnic.income += item.TongGia;
                    }
                }
            }
            decimal maxIC = lstDNIC.First().income;
            int index = 0;
            for (int i = 0; i < lstDNIC.Count; i++)
			{			 
			    if (lstDNIC[i].income > maxIC)
                {
                    maxIC = lstDNIC[i].income;
                    index = i;
                }
            }
            ViewData["DoanhNghiep"] = lstDNIC[index].dn.Ten_DoanhNghiep;
            ViewData["DoanhThu"] = DoanhThu;
            ViewData["SoLuong"] = temp.Count;
            ViewData["Type"] = type;
            ViewData["Thang"] = m;
            ViewData["Nam"] = y;
            ViewData["Quy"] = q;
            return View(lstDNIC);
        }

        [Authorize(Roles = "Admin,Manager")]
        public ActionResult ManagerPanel()
        {
            return View();
        }
    }
}
